使用ssh进行反向代理
我在实验室的内网里有一个工作站,安装的Linux系统,具体版本是Ubuntu 16.04。此外,我还有一个aliyun的ECS主机,这样我就有了一个公网IP。现在需要做的就是让我们的22端口能够绑定到aliyun主机的2221端口上。22端口是默认的ssh登陆端口。
1 | ssh -v -N -R 2221:127.0.0.1:22 aliyun.ip |
使用autossh进行反向代理
上网看了一下,似乎很多人都是使用autossh来进行反向代理,给出的理由是autossh会自动重连,但是我并没有尝试过。这里给出后台运行的命令
1 | autossh -M 55551 -f -v -gNR *:2221:127.0.0.1:22 root@aliyun.ip > /home/yezhe/log/autossh.log 2>&1 |
自动启动
写/etc/init.d/脚本
在ubuntu系统中,可以在/etc/init.d下编写一个脚本来让指定的程序来自动运行。将下面的内容存储到/etc/init.d
目录下,命名为autossh,然后再为其增加一执行权限sudo chmod +x autossh
。
1 |
|
写执行shell脚本
如果你仔细看这个代码,可以看到在后面有一个/home/yezhe/Workspace/autossh.sh
脚本,这个脚本里面实际包含了真正的autossh命令。下面贴出里面的内容
1 |
|
将其中的root、hostip1和hostip2都可以改成具体的情况,我这里是配置了可以通过公钥登录hostip1和hostip2。按照/etc/init.d/autossh
中写的,我把这个命令存成autossh.sh
,放到了/home/yezhe/Workspace/
下。
同样的还需要给这个sh脚本增加可执行权限1
sudo chmod +x autossh.sh
配置自动登录
启动的时候机器执行上面的命令肯定使用root用户的,所以我就需要先切换到root用户来配置自动登录。
下面是一个比较奇怪的地方,以后有时间再去尝试一下。我一般是按照下面的步骤来配置root的自动登录的1
2
3
4su root
ssh-keygen
ssh-copy-id root@hostip1
ssh-copy-id root@hostip2
这种状况对于使用像1
ssh root@hostip1
来登录是可以的,但是对于在非root用户的情况下使用1
sudo ssh root@hostip1
来登录是不可行的。因此这里采用下面的配置方式,不需要切换到root1
2
3sudo ssh-keygen
sudo ssh-copy-id root@hotsip1
sudo ssh-copy-id root@hostip2
让/etc/init.d/autossh 开机启动
1 | sudo update-rc.d autossh defaults 99 |
到此,可以使用sudo /etc/init.d/autossh start
来启动命令,也可以使用sudo /etc/init.d/autossh stop
来停止。